<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    /** promise是什么？
     * 用于解决地狱回调问题，地狱回调问题是多个回调函数嵌套函数的情况就是地狱回调问题，promise它可以进行链式调用（.then  .catch）
     * promise有三种状态：padding初始状态进行中，fulfilled成功状态，请求成功走.then 。rejected失败状态 请求失败走.catch
     * promise有一些api方法（then成功执行  catch失败执行 finally无论成功失败都执行  all主要用于一次性可以解决多个异步方法并且按顺序执行 
     * race用于多个异步操作的时候只保留第一个执行的异步操作的结果，后几个结果会执行但是结果不会保留会被抛弃）
     * promise应用场景:封装ajax、axios的get和post，微信小程序的wx.request  uniApp开发的uni.request
     * 
     * async和await理解
     * es6中promise可以把异步操作改编成同步执行 
     * es7中新增了async函数是异步的简写 它返回的是一个promise对象。它可以把异步操作改成同步执行
     * await相当于代替promise中的.then执行的内容 await执行的是异步操作的内容  有await就必须有async async放在await最近的一个函数 
     * async await的错误处理 把await放到js原生的try中如果有异常执行catch
     * 
     * 说一下你对深拷贝浅拷贝的理解
    */

    function clone(Obj) {//首先，然后确定递归的回调，最终到达对象或者数组的末端，达到深拷贝的要求。
        var newObj;   
        if (Obj instanceof Array) { //确定类型
            newObj = [];  // 创建一个空的数组
            var i = Obj.length;
            while (i--) {
                newObj[i] = clone(Obj[i]); //递归回调
            }
            return newObj;
        } else if (Obj instanceof Object){ //确定类型
            newObj = {};  // 创建一个空对象
            for (var k in Obj) {  // 为这个对象添加新的属性
                newObj[k] = clone(Obj[k]); //递归回调
            }
            return newObj; //结束函数完成深拷贝
        }else{
            return Obj; //结束函数完成深拷贝
        }
    }
</script>